﻿@{
    //  设置布局页和页标题
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "忘记密码?";

    bool passwordSent = false;
    bool isValid = true;
    var errorMessage = "";
    var emailError = "";
    var disabledAttribute = "";
    var resetToken = "";
    var email = Request.Form["email"] ?? Request.QueryString["email"];

    if (IsPost) {
        // validate email
        if (email.IsEmpty() || !email.Contains("@")) {
            emailError = "请输入有效的电子邮件";
            isValid = false;
        }
        if (isValid) {
            if (WebSecurity.GetUserId(email) > -1 && WebSecurity.IsConfirmed(email)) {
                resetToken = WebSecurity.GeneratePasswordResetToken(email); //也可以为令牌指定到期日期
            } else {
                passwordSent = true; // 我们不希望公开该用户不存在的信息。
                isValid = false;
            }
        }
        if (isValid) {
            var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
            var resetUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/PasswordReset?resetToken=" + HttpUtility.UrlEncode(resetToken));
            WebMail.Send(
                to: email,	
                subject: "请重置密码", 
                body: "请使用此密码重置令牌重置您的密码。 令牌是: " + resetToken + @". 请访问 <a href=""" + resetUrl + @""">" + resetUrl + "</a> 以重置密码。"
            );
            passwordSent = true;
            disabledAttribute = @"disabled=""disabled""";
        }
    }
}

<form method="post" action="">
    <fieldset>
        <legend>密码重置说明表单</legend>
        @if (!WebMail.SmtpServer.IsEmpty()) {
            <p>
                我们会向与帐户关联的电子邮件地址发送密码重置说明。 
            </p>
            if (passwordSent) {
                <p class="message success">
                    我们已向指定的电子邮件地址发送了密码重置说明。
                </p>
            }
            if (!errorMessage.IsEmpty()) {
                <p class="message error">
                    @errorMessage
                </p>
            }
            <ol>
                <li class="email">
                    <label for="email">电子邮件地址</label>
                    <input type="text" id="email" name="email" title="电子邮件地址" value="@email" @disabledAttribute @if(!emailError.IsEmpty()){<text>class="error-field"</text>} />
                    @if (!emailError.IsEmpty()) {
                        <label class="validation-error">@emailError</label>
                    }
                </li>
            </ol>
            <p class="form-actions">
                <input type="submit" value="Send Instructions" @disabledAttribute/>
            </p>
        } else {
            <p class="message info">
                因为没有正确配置 SMTP 服务器，所以此网站禁用了 
                密码恢复功能。 要重置密码，请与此站点的所有者 
                联系。
            </p>
        }
    </fieldset>
</form>

